home *** CD-ROM | disk | FTP | other *** search
/ Aminet 52 / Aminet 52 (2002)(GTI - Schatztruhe)[!][Dec 2002].iso / Aminet / dev / gg / ncurses-5.3.lha / ncurses-5.3 / c++ / cursslk.cc < prev    next >
C/C++ Source or Header  |  2002-10-24  |  5KB  |  124 lines

  1. // * this is for making emacs happy: -*-Mode: C++;-*-
  2. /****************************************************************************
  3.  * Copyright (c) 1998,2000,2001 Free Software Foundation, Inc.              *
  4.  *                                                                          *
  5.  * Permission is hereby granted, free of charge, to any person obtaining a  *
  6.  * copy of this software and associated documentation files (the            *
  7.  * "Software"), to deal in the Software without restriction, including      *
  8.  * without limitation the rights to use, copy, modify, merge, publish,      *
  9.  * distribute, distribute with modifications, sublicense, and/or sell       *
  10.  * copies of the Software, and to permit persons to whom the Software is    *
  11.  * furnished to do so, subject to the following conditions:                 *
  12.  *                                                                          *
  13.  * The above copyright notice and this permission notice shall be included  *
  14.  * in all copies or substantial portions of the Software.                   *
  15.  *                                                                          *
  16.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
  17.  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
  18.  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
  19.  * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
  20.  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
  21.  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
  22.  * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
  23.  *                                                                          *
  24.  * Except as contained in this notice, the name(s) of the above copyright   *
  25.  * holders shall not be used in advertising or otherwise to promote the     *
  26.  * sale, use or other dealings in this Software without prior written       *
  27.  * authorization.                                                           *
  28.  ****************************************************************************/
  29.  
  30. /****************************************************************************
  31.  *   Author: Juergen Pfeifer, 1997                                          *
  32.  *   Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en             *
  33.  ****************************************************************************/
  34.  
  35. #include "internal.h"
  36. #include "cursslk.h"
  37. #include "cursesapp.h"
  38. #include <string.h>
  39.  
  40. MODULE_ID("$Id: cursslk.cc,v 1.10 2002/07/13 11:35:08 juergen Exp $")
  41.  
  42. void Soft_Label_Key_Set::Soft_Label_Key::operator=(char *text)  {
  43.   delete[] label;
  44.   label = new char[1 + ::strlen(text)];
  45.   (::strcpy)(label,text);
  46. }
  47.  
  48. long Soft_Label_Key_Set::count      = 0L;
  49. int  Soft_Label_Key_Set::num_labels = 0;
  50.  
  51. Soft_Label_Key_Set::Label_Layout 
  52.   Soft_Label_Key_Set::format = None;
  53.  
  54. void Soft_Label_Key_Set::init() {
  55.   slk_array = new Soft_Label_Key[num_labels];
  56.   for(int i=0; i < num_labels; i++) {
  57.     slk_array[i].num = i+1;
  58.   }
  59.   b_attrInit = FALSE;
  60. }
  61.  
  62. Soft_Label_Key_Set::Soft_Label_Key_Set() {
  63.   if (format==None)
  64.     Error("No default SLK layout");
  65.   init();
  66. }
  67.  
  68. Soft_Label_Key_Set::Soft_Label_Key_Set(Soft_Label_Key_Set::Label_Layout fmt) {
  69.   if (fmt==None)
  70.     Error("Invalid SLK Layout");
  71.   if (count++==0) {
  72.     format = fmt;
  73.     if (ERR == ::slk_init((int)fmt))
  74.       Error("slk_init");
  75.     num_labels = (fmt>=PC_Style?12:8);
  76.   }
  77.   else if (fmt!=format)
  78.     Error("All SLKs must have same layout");
  79.   init();
  80. }
  81.  
  82. Soft_Label_Key_Set::~Soft_Label_Key_Set() {
  83.   if (!::isendwin())
  84.     clear();
  85.   delete[] slk_array;
  86.   count--;
  87. }
  88.  
  89. Soft_Label_Key_Set::Soft_Label_Key& Soft_Label_Key_Set::operator[](int i) {
  90.   if (i<1 || i>num_labels)
  91.     Error("Invalid Label index");
  92.   return slk_array[i-1];
  93. }
  94.  
  95. void Soft_Label_Key_Set::activate_label(int i, bool bf) {
  96.   if (!b_attrInit) {
  97.     NCursesApplication* A = NCursesApplication::getApplication();
  98.     if (A) attrset(A->labels());
  99.     b_attrInit = TRUE;
  100.   }
  101.   Soft_Label_Key& K = (*this)[i];
  102.   if (ERR==::slk_set(K.num,bf?K.label:"",K.format))
  103.     Error("slk_set");
  104.   noutrefresh();
  105. }
  106.  
  107. void Soft_Label_Key_Set::activate_labels(bool bf) {
  108.   if (!b_attrInit) {
  109.     NCursesApplication* A = NCursesApplication::getApplication();
  110.     if (A) attrset(A->labels());
  111.     b_attrInit = TRUE;
  112.   }
  113.   for(int i=1; i <= num_labels; i++) {
  114.     Soft_Label_Key& K = (*this)[i];
  115.     if (ERR==::slk_set(K.num,bf?K.label:"",K.format))
  116.       Error("slk_set");
  117.   }
  118.   if (bf)
  119.     restore();
  120.   else
  121.     clear();
  122.   noutrefresh();
  123. }
  124.